package com.example.demo.controller;

import com.example.demo.entity.Schedule;
import com.example.demo.service.ScheduleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@CrossOrigin//允许跨域请求
@RestController
@RequestMapping("/schedule")//统一的前缀，前端访问/schedule开头的接口
public class ScheduleController {

    @Autowired
    private ScheduleService scheduleService;

    /**
     * 获取排班列表（支持分页）
     * @param page 页码，默认第1页
     * @param size 每页条数，默认10条
     * @return 包含分页信息的排班列表
     */
    @GetMapping
    public Map<String, Object> listSchedules(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        // 调用服务层获取分页数据
        List<Schedule> schedules = scheduleService.listSchedules(page, size);
        // 获取总记录数
        Integer total = scheduleService.getTotalCount();

        // 构建返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("records", schedules);
        result.put("total", total);
        return result;
    }

    /**
     * 新增排班
     * @param schedule 排班信息
     * @return 操作是否成功
     */
    @PostMapping("/add")
    public boolean addSchedule(@RequestBody Schedule schedule) {
        return scheduleService.save(schedule);
    }

    /**
     * 更新排班状态
     * @param schedule 包含id和status的排班对象
     * @return 操作是否成功
     */
    @PostMapping("/updateStatus")
    public boolean updateStatus(@RequestBody Schedule schedule) {
        return scheduleService.updateById(schedule);
    }

    /**
     * 根据ID删除排班
     * @param id 排班ID
     * @return 操作是否成功
     */
    @DeleteMapping("/delete/{id}")
    public boolean deleteById(@PathVariable Integer id) {
        return scheduleService.removeById(id);
    }

    /**
     * 更新排班信息
     * @param schedule 排班信息（包含ID）
     * @return 操作是否成功
     */
    @PutMapping("/update")
    public boolean updateSchedule(@RequestBody Schedule schedule) {
        return scheduleService.updateById(schedule);
    }
}